<?php
/**
 * vim: et ts=4 sts=4 sw=4 fdm=marker
 *
 * 图片处理类.
 *
 * @author	Wang Penghai <china_php@hotmail.com>
 * @copyright 2007 5e6d Corporation.
 * @version   $Id$
 */

/**
 * path configure
 */
//require_once PF_APP_LIB_PATH . 'pf_lib_base.class.php';


/**
 *
 * 错误代码说明:
 * <code>
 * </code>
 *
 * @package DB_INTERFACE_SYS
 * @see pf_lib_db_if_base
 */

//class pf_lib_image extends pf_lib_base
class pf_image
{

	/*{{{ member*/

	/**
	 * 缩略图默认后缀 
	 * @var string
	 */
	protected $__dst_file_ext = '.thumb.jpg';

	/**
	 * 缩略图默认宽度 
	 * @var string
	 */
	protected $__dst_file_tow = 60;
	/**
	 * 缩略图默认高度 
	 * @var string
	 */
	protected $__dst_file_toh = 60;
	/**
	 * 缩略图默认最大宽度 
	 * @var string
	 */
	protected $__dst_file_maxtow = 300;
	/**
	 * 缩略图默认最大高度 
	 * @var string
	 */
	protected $__dst_file_maxtoh = 300;

	/*}}}*/
	/*{{{ function*/

	/*{{{ public function setconf()*/

	/**
	 * 配置
	 *
	 * @param array $argvs = array( 'tow'=>'缩略图宽度', 
	 *							  'toh'=>'缩略图高度', 
	 *							  'maxtow'=>'最大宽度'， 
	 *							  'maxtoh'=>'最大高度', 
	 *							  'ext'=>'扩展名',
	 *							);
	 *									  
	 * @return void
	 */
	public function setconf($argvs)
	{
		if (isset($argvs['tow'])) {
			$this->__dst_file_tow = $argvs['tow'];
		}

		if (isset($argvs['toh'])) {
			$this->__dst_file_toh = $argvs['toh'];
		}

		if (isset($argvs['maxtow'])) {
			$this->__dst_file_maxtow = $argvs['maxtow'];
		}

		if (isset($argvs['maxtoh'])) {
			$this->__dst_file_maxtoh = $argvs['maxtoh'];
		}

		if (isset($argvs['ext'])) {
			$this->__dst_file_ext = $argvs['ext'];
		}
	}

	/*{{{ public function makethumb()*/
	/**
	 * 获取上传文件的后缀名称
	 *
	 * @param string $file 文件名称
	 */
	protected function _get_file_extension($file)
	{
		 return strtolower( str_replace( ".", "", substr( $file, strrpos( $file, '.' ) ) ) );
	}

	/**
	 * 生成缩略图
	 *
	 * @param string $srcfile 图片文件路径
	 *
	 * @return string $dstfile 缩略图路径
	 */
	public function makethumb($srcfile)
	{
		//判断文件是否存在
		if (!file_exists($srcfile)) {
			return '';
		}

		//$dstfile = $srcfile . $this->__dst_file_ext;
		$patch_args = pathinfo($srcfile);
		$dstfile =  $patch_args["dirname"] . '/' . $patch_args['filename'] . $this->__dst_file_ext;

		//缩略图大小
		$tow = intval($this->__dst_file_tow);
		$toh = intval($this->__dst_file_toh);
		if($tow < 60) $tow = 60;
		if($toh < 60) $toh = 60;

		$make_max = 0;
		$maxtow = intval($this->__dst_file_maxtow);
		$maxtoh = intval($this->__dst_file_maxtoh);
		if($maxtow >= 300 && $maxtoh >= 300) {
			$make_max = 1;
		}

		//获取图片信息
		$im = '';
		if($data = getimagesize($srcfile)) {
			if($data[2] == 1) {
				$make_max = 0;//gif不处理
				if(function_exists("imagecreatefromgif")) {
					$im = imagecreatefromgif($srcfile);
				}
			} elseif($data[2] == 2) {
				if(function_exists("imagecreatefromjpeg")) {
					$im = imagecreatefromjpeg($srcfile);
				}
			} elseif($data[2] == 3) {
				if(function_exists("imagecreatefrompng")) {
					$im = imagecreatefrompng($srcfile);
				}
			}
		}
		if(!$im) return '';

		$srcw = imagesx($im);
		$srch = imagesy($im);

		$towh = $tow/$toh;
		$srcwh = $srcw/$srch;
		if($towh <= $srcwh){
			$ftow = $tow;
			$ftoh = $ftow*($srch/$srcw);

			$fmaxtow = $maxtow;
			$fmaxtoh = $fmaxtow*($srch/$srcw);
		} else {
			$ftoh = $toh;
			$ftow = $ftoh*($srcw/$srch);

			$fmaxtoh = $maxtoh;
			$fmaxtow = $fmaxtoh*($srcw/$srch);
		}
		if($srcw <= $maxtow && $srch <= $maxtoh) {
			$make_max = 0;//不处理
		}
		if($srcw > $tow || $srch > $toh) {
			if(function_exists("imagecreatetruecolor") && function_exists("imagecopyresampled") && @$ni = imagecreatetruecolor($ftow, $ftoh)) {
				imagecopyresampled($ni, $im, 0, 0, 0, 0, $ftow, $ftoh, $srcw, $srch);
				//大图片
				if($make_max && @$maxni = imagecreatetruecolor($fmaxtow, $fmaxtoh)) {
					imagecopyresampled($maxni, $im, 0, 0, 0, 0, $fmaxtow, $fmaxtoh, $srcw, $srch);
				}
			} elseif(function_exists("imagecreate") && function_exists("imagecopyresized") && @$ni = imagecreate($ftow, $ftoh)) {
				imagecopyresized($ni, $im, 0, 0, 0, 0, $ftow, $ftoh, $srcw, $srch);
				//大图片
				if($make_max && @$maxni = imagecreate($fmaxtow, $fmaxtoh)) {
					imagecopyresized($maxni, $im, 0, 0, 0, 0, $fmaxtow, $fmaxtoh, $srcw, $srch);
				}
			} else {
				return '';
			}
			if(function_exists('imagejpeg')) {
				imagejpeg($ni, $dstfile);
				//大图片
				if($make_max) {
					imagejpeg($maxni, $srcfile);
				}
			} elseif(function_exists('imagepng')) {
				imagepng($ni, $dstfile);
				//大图片
				if($make_max) {
					imagepng($maxni, $srcfile);
				}
			}
			imagedestroy($ni);
			if($make_max) {
				imagedestroy($maxni);
			}
		}
		imagedestroy($im);

		if(!file_exists($dstfile)) {
			return '';
		} else {
			return $dstfile;
		}

	}

	/*}}}*/
	/*}}}*/
};
?>
